#pragma once

template<typename T>
class xref_ptr
{
public: 
	xref_ptr(const xref_ptr<T> & rhs)
	{
		NOTIMPL
	}

	xref_ptr()
	{
		NOTIMPL
	}

	xref_ptr(T * ptr)
	{
		NOTIMPL
	}
	
	~xref_ptr()
	{
		NOTIMPL
	}

	xref_ptr<T> & operator=(const xref_ptr<T> & rhs)
	{
		NOTIMPL
	}

	void reset()
	{
		NOTIMPL
	}

	HRESULT reset(T * ptr)
	{
		NOTIMPL
	}

	HRESULT init(T * ptr)
	{
		NOTIMPL
	}

	T & operator*()
	{
		NOTIMPL
	}

	T * operator->() const
	{
		NOTIMPL
	}

	//XUINT32 operator unsigned int() const;
	operator T *()
	{
		NOTIMPL
	}
private: 
	void DecrementRefCount()
	{
		NOTIMPL
	}

	void IncrementRefCount()
	{
		NOTIMPL
	}
	T * m_ptr;
};